package com.tangruojie;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * ✅ SpringApplication.run(...) 做了哪些关键操作？
 * 1、创建 SpringApplication 实例
 * 2、启动 Spring 容器（ApplicationContext）
 * 3、自动判断是普通 Java 项目还是 Web 项目
 * 4、如果是 Web 项目，则自动创建并启动 TomcatWebServer
 * 5、将 DispatcherServlet、Filter、Listener 注册到容器中
 * 6、输出启动日志、监听端口（默认 8080）并等待请求
 * 也就是说，Tomcat 的启动是被 SpringApplication.run() 这个方法触发的！
 */
@SpringBootApplication
public class Springboot02BaseConfigApplication {

    /**
     * main() 方法
     * ↓
     * SpringApplication.run()
     * ↓
     * 创建 ApplicationContext
     * ↓
     * 根据类路径中是否存在 web 相关依赖（如 Servlet）
     * ↓
     * 判断为 WebApplication 类型
     * ↓
     * 创建 WebServer（默认是 Tomcat）
     * ↓
     * 启动 Tomcat 并监听端口
     * ↓
     * 注册 DispatcherServlet 等组件
     * ---------
     * Tomcat 本质上是通过如下类启动的：
     * org.springframework.boot.web.embedded.tomcat.TomcatWebServer
     */
    public static void main(String[] args) {
        SpringApplication.run(Springboot02BaseConfigApplication.class, args);
    }

}
/**
 * 🔥 SpringMVC 外置 Tomcat 启动机制
 * 🌐 项目部署流程：
 * SpringMVC 项目打包为 .war 文件
 * 手动部署到安装好的 Tomcat 的 webapps 目录下
 * 启动 Tomcat 服务（如 startup.bat）
 * Tomcat 会读取 web.xml 或通过 ServletContainerInitializer 加载 Spring 配置
 * SpringMVC 启动 DispatcherServlet
 * 等待浏览器访问对应 URL
 */